CSRF (Cross-Site Request Forgery) কি এবং কেন এটি প্রয়োজন?

Java Technologies - স্প্রিং সিকিউরিটি (Spring Security) - Spring Security এবং CSRF Protection
456

CSRF হল একটি সাধারণ ওয়েব নিরাপত্তা দুর্বলতা যেখানে একটি হ্যাকার বৈধ ব্যবহারকারীকে ঠকিয়ে একটি অবাঞ্ছিত বা ক্ষতিকারক অনুরোধ সম্পাদন করতে বাধ্য করে। এটি বিশেষত এমন ক্ষেত্রে ঘটে যখন ব্যবহারকারী সঠিকভাবে লগইন করা অবস্থায় থাকে এবং সেশনের সাথে যুক্ত একটি বৈধ সুরক্ষা টোকেন (Session Token) রয়েছে।


CSRF কীভাবে কাজ করে?

  1. Step 1:
    • ব্যবহারকারী একটি নির্ভরযোগ্য ওয়েবসাইটে লগইন করে।
    • ওয়েবসাইটটি একটি সক্রিয় সেশন বা সুরক্ষা টোকেন তৈরি করে যা ব্রাউজারের সাথে যুক্ত থাকে।
  2. Step 2:
    • হ্যাকার ব্যবহারকারীকে একটি ক্ষতিকারক লিঙ্ক বা ফর্মে ক্লিক করাতে প্ররোচিত করে।
  3. Step 3:
    • ব্যবহারকারী সেই লিঙ্কে ক্লিক করলে, হ্যাকার একটি HTTP রিকোয়েস্ট পাঠায় যেটি ব্যবহারকারীর সেশনের অধীনে প্রমাণীকৃত হয়।
  4. Step 4:
    • ওয়েব সার্ভার সেই রিকোয়েস্টটি বৈধ মনে করে এবং ব্যবহারকারীর অনুমোদনের বাইরে একটি ক্ষতিকারক কাজ সম্পন্ন হয় (যেমন, অ্যাকাউন্ট ডিলিট করা বা অর্থ লেনদেন)।

CSRF প্রতিরোধ কেন প্রয়োজন?

  1. Unauthorized Action প্রতিরোধ:
    • ব্যবহারকারীকে না জানিয়েই গুরুত্বপূর্ণ কাজ (যেমন, অর্থ স্থানান্তর, ডেটা মুছে ফেলা) সম্পন্ন হতে পারে।
  2. User Trust বজায় রাখা:
    • CSRF আক্রমণ ব্যবহারকারীর এবং সার্ভারের মধ্যে বিশ্বাস নষ্ট করে।
  3. Sensitive Operations সুরক্ষিত করা:
    • যেমন পাসওয়ার্ড পরিবর্তন, অর্থ লেনদেন, বা অ্যাকাউন্ট ডিলিট সুরক্ষিত রাখা।
  4. Web Application এর সুনাম রক্ষা করা:
    • CSRF আক্রমণ ওয়েব অ্যাপ্লিকেশনের নিরাপত্তা প্রশ্নবিদ্ধ করতে পারে।

Spring Security এ CSRF Protection:

Spring Security ডিফল্টভাবে CSRF Protection সক্রিয় করে। এটি নিশ্চিত করে যে প্রতিটি HTTP POST, PUT, DELETE রিকোয়েস্টের সাথে একটি বৈধ CSRF টোকেন অন্তর্ভুক্ত থাকে।

Spring Security এ CSRF Protection কনফিগারেশন:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/public").permitAll()
                .anyRequest().authenticated()
            .and()
            .csrf(); // CSRF Protection ডিফল্টভাবে সক্রিয়
    }
}

CSRF Token HTML ফর্মে যোগ করা:

Spring Security একটি CSRF টোকেন সরবরাহ করে যা ফর্ম সাবমিশনের সময় পাঠানো হয়।

<form action="/submit" method="post">
    <input type="hidden" name="_csrf" value="${_csrf.token}" />
    <button type="submit">Submit</button>
</form>

CSRF Token Access করতে:

Spring Security সরবরাহিত CSRF টোকেনটি থাইমলিফ বা সরাসরি API তে ব্যবহার করা যায়।

<meta name="_csrf" content="${_csrf.token}">
<meta name="_csrf_header" content="${_csrf.headerName}">

CSRF Protection API রিকোয়েস্টের জন্য:

  1. CSRF টোকেন হেডারে অন্তর্ভুক্ত করা: ক্লায়েন্টের (যেমন, React, Angular) API রিকোয়েস্টে CSRF টোকেন যোগ করতে হবে।
const csrfToken = document.querySelector('meta[name="_csrf"]').getAttribute('content');
const csrfHeader = document.querySelector('meta[name="_csrf_header"]').getAttribute('content');

fetch('/api/endpoint', {
    method: 'POST',
    headers: {
        [csrfHeader]: csrfToken,
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({ data: 'value' })
});
  1. CSRF Protection নিষ্ক্রিয় করা (যদি প্রয়োজন হয়): কিছু ক্ষেত্রে (যেমন, শুধুমাত্র API-এর জন্য ব্যবহার), CSRF Protection নিষ্ক্রিয় করা যেতে পারে।
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable() // CSRF Protection নিষ্ক্রিয়
            .authorizeRequests()
                .antMatchers("/api/**").permitAll()
                .anyRequest().authenticated();
    }
}

Spring Security এ CSRF Protection এর সুবিধা:

  1. Cross-Site Attacks প্রতিরোধ:
    • Spring Security নিশ্চিত করে যে প্রতিটি সংবেদনশীল রিকোয়েস্টে একটি বৈধ টোকেন প্রয়োজন।
  2. Automatic Token Generation:
    • Spring Security স্বয়ংক্রিয়ভাবে CSRF টোকেন তৈরি এবং যাচাই করে।
  3. Customizable Configuration:
    • প্রয়োজন অনুযায়ী CSRF Protection কাস্টমাইজ করা যায়।

CSRF Protection এর চ্যালেঞ্জ এবং সমাধান:

  1. API Only Applications:
    • যদি অ্যাপ্লিকেশন কেবল API-এর উপর ভিত্তি করে হয় এবং শুধুমাত্র টোকেন ভিত্তিক Authentication ব্যবহার করে, তাহলে CSRF Protection নিষ্ক্রিয় করা যেতে পারে।
  2. Stateful vs Stateless Application:
    • Stateless অ্যাপ্লিকেশনে (যেমন JWT বা OAuth ব্যবহার করা হলে), CSRF Protection এর প্রয়োজন হয় না।

CSRF vs XSS (Cross-Site Scripting):

CSRFXSS
ব্যবহারকারীর সেশনের দুর্বলতা ব্যবহার করে।ব্রাউজার এবং ক্লায়েন্ট সাইড কোডে আক্রমণ করে।
সঠিক টোকেন প্রয়োজন।আক্রমণকারী স্ক্রিপ্ট ইনজেক্ট করে।
ব্যবহারকারীকে ভুল কাজ সম্পন্ন করতে প্ররোচিত করে।ডেটা চুরি বা সিস্টেম ম্যানিপুলেট করে।

CSRF সুরক্ষার গুরুত্ব:

CSRF আক্রমণ সিস্টেমের নিরাপত্তা ঝুঁকি বাড়ায়। Spring Security এর বিল্ট-ইন CSRF Protection ওয়েব অ্যাপ্লিকেশনের সুরক্ষার একটি অপরিহার্য অংশ। এটি ব্যবহার করে নিরাপদ অ্যাপ্লিকেশন তৈরি করা সহজ হয়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...